package com.webserver.core;

import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;

import java.io.IOException;
import java.net.Socket;

/**
 * Author：毕龙
 * Date: 2022/9/21 8:40
 * 与客户端完成一次HTTP的交互
 * 按照HTTP协议要求与客户端完成一次交互流程一问一答
 * 因此：这里分为三步完成该工作
 * 1.解析请求 目的：将浏览器发送的请求类型读取并整理
 * 2.处理请求 目的：根据浏览器的请求进行对应的处理工作
 * 3.发送响应 目的：将服务端的处理结果回馈给浏览器
 */
public class ClientHandler implements Runnable{

    private Socket socket;
    public ClientHandler(Socket socket){
        this.socket = socket;
    }


    @Override
    public void run() {
        try {
            //1.解析请求 实例化请求对象的过程就是解析的过程
            HttpServletRequest request = new HttpServletRequest(socket);
            HttpServletResponse response = new HttpServletResponse(socket);

            //2处理请求
            DispatcherServlet.getInstance().service(request, response);

            //3.发送响应
            response.response();
        } catch (Exception e) {


        } finally {
            //按照HTTP协议要求 一问一答断开连接
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
